import axios from 'axios'
import store from '@/store'
import { Message } from 'element-ui'
const request = axios.create({
  baseURL: '/api',
  timeout: 10000
})

request.interceptors.request.use((config) => {
  // 注入token
  //  this.$store.getters
  // store.getters.token => 请求头里面
  if (store.getters.token) {
    config.headers.Authorization = `Bearer ${store.getters.token}`
  }
  return config
}, (error) => {
  // 失败执行promise
  return Promise.reject(error)
})

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 处理Blob对象的情况
    if (response.data instanceof Blob) {
      return response.data
    }

    // 检查response.data是否存在且有预期的结构
    const data = response.data
    if (data && typeof data === 'object' && 'success' in data) {
      if (data.success) {
        return data.data
      } else {
        Message({ type: 'error', message: data.message || '请求失败' })
        return Promise.reject(new Error(data.message || '请求失败'))
      }
    } else {
      // 如果响应数据不符合预期结构，抛出错误
      Message({ type: 'error', message: '响应数据格式错误' })
      return Promise.reject(new Error('响应数据格式错误'))
    }
  },
  async(error) => {
    // 检查 error.response 是否存在
    if (error.response) {
      // 请求已发出，但服务器响应的状态码不在 2xx 范围内
      const { status, data } = error.response
      if (status === 401) {
        Message({ type: 'error', message: '登录过期，请重新登录' })
        await store.dispatch('user/logout')
      } else {
        Message({ type: 'error', message: data?.message || '服务器错误' })
      }
    } else if (error.request) {
      // 请求已发出，但没有收到响应（可能是由于网络问题）
      Message({ type: 'error', message: '网络请求失败，请稍后再试' })
    } else {
      // 其他错误（如配置错误）
      Message({ type: 'error', message: '请求初始化失败，请检查配置' })
    }
    console.error('API 请求失败:', error) // 添加日志记录
    return Promise.reject(error)
  }
)

export default request
